<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">

<title>README - RDoc Documentation</title>


<script src="../js/navigation.js" defer></script>
<script src="../js/search.js" defer></script>
<script src="../js/search_index.js" defer></script>
<script src="../js/searcher.js" defer></script>
<script src="../js/darkfish.js" defer></script>

<script src="../js/jquery-3.2.0.min.js"></script>

<script src="../js/vue.min.js"></script>
<script src="../js/js.cookie.min.js"></script>

<link href="../css/fonts.css" rel="stylesheet">
<link id='rdoccss' href="../css/rdoc.css" rel="stylesheet">
<link href="../css/carbon17.css" rel="stylesheet">

<script type="text/javascript">
  var rdoc_rel_prefix = "../";
  var index_rel_prefix = "../";
  var darkModeCsseHref = "../css/rdoc-dm.css"
  var defaultModeCssHref = "../css/rdoc.css"
  // var cssDarkmode = Cookies.get('darkmode');
  
  if( Cookies.get("darkmode") == "true") {
	$('#rdoccss').attr("href", darkModeCsseHref);
}

//  https://cssdeck.com/blog/simple-jquery-stylesheet-switcher/

document.write('<style type="text/css">body{display:none}</style>');

</script>


</head>
<body id="top" role="document" class="file">
  <!-- this is page.html -->
  <div id='actionbar' >
    <div class='wrapper mdiv'>
      <ul class='grids g0'></ul>
    </div> 
    <!-- VERSION HEADER for 3.3.0-preview2 NOT FOUND -->
  </div> <!-- end action bar -->


 <div class='wrapper hdiv'>

 


<nav id='vapp' role="navigation">
  <div id="project-navigation">
    <div id="home-section" role="region" title="Quick navigation" class="nav-section">
  <h2><a href="../index.html" rel="home">Home</a></h2>

  <div id="table-of-contents-navigation"  >
    <a href="../table_of_contents.html#pages">Pages</a>
    <a href="../table_of_contents.html#classes">Classes</a>
    <a href="../table_of_contents.html#methods">Methods</a>
  </div>
</div>

    <div id="search-section" role="search" class="project-section initially-hidden">
  <form action="#" method="get" accept-charset="utf-8">
    <div id="search-field-wrapper">
      <input id="search-field" role="combobox" aria-label="Search"
             aria-autocomplete="list" aria-controls="search-results"
             type="text" name="search" placeholder="Search" spellcheck="false"
             title="Type to search, Up and Down to navigate, Enter to load">
    </div>

    <ul id="search-results" aria-label="Search Results"
        aria-busy="false" aria-expanded="false"
        aria-atomic="false" class="initially-hidden"></ul>
  </form>
</div>

  </div>

  
<div class="nav-section">
  <h3>Table of Contents</h3>

  <ul class="link-list" role="directory">
    <li><a href="#label-What+is+Ruby-3F">What is Ruby?</a>
    <li><a href="#label-Features+of+Ruby">Features of Ruby</a>
    <li><a href="#label-How+to+get+Ruby">How to get Ruby</a>
    <li><a href="#label-Download+with+Git">Download with Git</a>
    <li><a href="#label-How+to+build">How to build</a>
    <li><a href="#label-Ruby+home+page">Ruby home page</a>
    <li><a href="#label-Documentation">Documentation</a>
    <li><a href="#label-Mailing+list">Mailing list</a>
    <li><a href="#label-Copying">Copying</a>
    <li><a href="#label-Feedback">Feedback</a>
    <li><a href="#label-Contributing">Contributing</a>
    <li><a href="#label-The+Author">The Author</a>
  </ul>
</div>

  <button id='toggleThing' @click="toggleNav()" >Show/hide navigation</button>

  <div id="project-metadata">
   <div :class="isOpen ? 'block' : 'hidden' " id='toggleMe'>
    
<div id="fileindex-section" class="nav-section">
  <h3>Pages</h3>

  <ul class="link-list">
    <li><a href="../NEWS/NEWS-1_8_7.html">NEWS-1.8.7</a>
    <li><a href="../NEWS/NEWS-1_9_1.html">NEWS-1.9.1</a>
    <li><a href="../NEWS/NEWS-1_9_2.html">NEWS-1.9.2</a>
    <li><a href="../NEWS/NEWS-1_9_3.html">NEWS-1.9.3</a>
    <li><a href="../NEWS/NEWS-2_0_0.html">NEWS-2.0.0</a>
    <li><a href="../NEWS/NEWS-2_1_0.html">NEWS-2.1.0</a>
    <li><a href="../NEWS/NEWS-2_2_0.html">NEWS-2.2.0</a>
    <li><a href="../NEWS/NEWS-2_3_0.html">NEWS-2.3.0</a>
    <li><a href="../NEWS/NEWS-2_4_0.html">NEWS-2.4.0</a>
    <li><a href="../NEWS/NEWS-2_5_0.html">NEWS-2.5.0</a>
    <li><a href="../NEWS/NEWS-2_6_0.html">NEWS-2.6.0</a>
    <li><a href="../NEWS/NEWS-2_7_0.html">NEWS-2.7.0</a>
    <li><a href="../NEWS/NEWS-3_0_0_md.html">NEWS-3.0.0</a>
    <li><a href="../NEWS/NEWS-3_1_0_md.html">NEWS-3.1.0</a>
    <li><a href="../NEWS/NEWS-3_2_0_md.html">NEWS-3.2.0</a>
    <li><a href="../bsearch_rdoc.html">bsearch</a>
    <li><a href="../bug_triaging_rdoc.html">bug_triaging</a>
    <li><a href="../case_mapping_rdoc.html">case_mapping</a>
    <li><a href="../character_selectors_rdoc.html">character_selectors</a>
    <li><a href="../command_injection_rdoc.html">command_injection</a>
    <li><a href="../contributing_md.html">contributing</a>
    <li><a href="../contributing/building_ruby_md.html">building_ruby</a>
    <li><a href="../contributing/documentation_guide_md.html">documentation_guide</a>
    <li><a href="../contributing/glossary_md.html">glossary</a>
    <li><a href="../contributing/making_changes_to_ruby_md.html">making_changes_to_ruby</a>
    <li><a href="../contributing/making_changes_to_stdlibs_md.html">making_changes_to_stdlibs</a>
    <li><a href="../contributing/reporting_issues_md.html">reporting_issues</a>
    <li><a href="../contributing/testing_ruby_md.html">testing_ruby</a>
    <li><a href="../dig_methods_rdoc.html">dig_methods</a>
    <li><a href="../distribution_md.html">distribution</a>
    <li><a href="../dtrace_probes_rdoc.html">dtrace_probes</a>
    <li><a href="../encodings_rdoc.html">encodings</a>
    <li><a href="../extension_ja_rdoc.html">extension.ja</a>
    <li><a href="../extension_rdoc.html">extension</a>
    <li><a href="../fiber_md.html">fiber</a>
    <li><a href="../format_specifications_rdoc.html">format_specifications</a>
    <li><a href="../globals_rdoc.html">globals</a>
    <li><a href="../implicit_conversion_rdoc.html">implicit_conversion</a>
    <li><a href="../keywords_rdoc.html">keywords</a>
    <li><a href="../maintainers_md.html">maintainers</a>
    <li><a href="../marshal_rdoc.html">marshal</a>
    <li><a href="../memory_view_md.html">memory_view</a>
    <li><a href="../optparse/argument_converters_rdoc.html">argument_converters</a>
    <li><a href="../optparse/creates_option_rdoc.html">creates_option</a>
    <li><a href="../optparse/option_params_rdoc.html">option_params</a>
    <li><a href="../optparse/tutorial_rdoc.html">tutorial</a>
    <li><a href="../packed_data_rdoc.html">packed_data</a>
    <li><a href="../ractor_md.html">ractor</a>
    <li><a href="../regexp_rdoc.html">regexp</a>
    <li><a href="../regexp/methods_rdoc.html">methods</a>
    <li><a href="../regexp/unicode_properties_rdoc.html">unicode_properties</a>
    <li><a href="../ruby_3_3_0_preview2/COPYING.html">COPYING</a>
    <li><a href="../ruby_3_3_0_preview2/COPYING_ja.html">COPYING.ja</a>
    <li><a href="../ruby_3_3_0_preview2/LEGAL.html">LEGAL</a>
    <li><a href="../ruby_3_3_0_preview2/NEWS_md.html">NEWS</a>
    <li><a href="../ruby_3_3_0_preview2/README_ja_md.html">README.ja</a>
    <li><a href="../ruby_3_3_0_preview2/README_md.html">README</a>
    <li><a href="../security_rdoc.html">security</a>
    <li><a href="../signals_rdoc.html">signals</a>
    <li><a href="../standard_library_rdoc.html">standard_library</a>
    <li><a href="../strftime_formatting_rdoc.html">strftime_formatting</a>
    <li><a href="../syntax_rdoc.html">syntax</a>
    <li><a href="../syntax/assignment_rdoc.html">assignment</a>
    <li><a href="../syntax/calling_methods_rdoc.html">calling_methods</a>
    <li><a href="../syntax/comments_rdoc.html">comments</a>
    <li><a href="../syntax/control_expressions_rdoc.html">control_expressions</a>
    <li><a href="../syntax/exceptions_rdoc.html">exceptions</a>
    <li><a href="../syntax/literals_rdoc.html">literals</a>
    <li><a href="../syntax/methods_rdoc.html">methods</a>
    <li><a href="../syntax/miscellaneous_rdoc.html">miscellaneous</a>
    <li><a href="../syntax/modules_and_classes_rdoc.html">modules_and_classes</a>
    <li><a href="../syntax/pattern_matching_rdoc.html">pattern_matching</a>
    <li><a href="../syntax/precedence_rdoc.html">precedence</a>
    <li><a href="../syntax/refinements_rdoc.html">refinements</a>
    <li><a href="../timezones_rdoc.html">timezones</a>
    <li><a href="../windows_md.html">windows</a>
    <li><a href="../yjit/yjit_md.html">yjit</a>
    <li><a href="../yjit/yjit_hacking_md.html">yjit_hacking</a>
  </ul>
</div>

   </div>
  </div>
</nav>


<!--  carbon ads here -->

<div id='extraz'>
  <div class='adzbox-index'  >
   
  </div>
 </div>         


<main role="main" aria-label="Page ruby_3_3_0_preview2/README.md">

<p><a href="https://github.com/ruby/ruby/actions?query=workflow%3A"MinGW""><img src="https://github.com/ruby/ruby/workflows/MinGW/badge.svg"></a> <a href="https://github.com/ruby/ruby/actions?query=workflow%3A"RJIT""><img src="https://github.com/ruby/ruby/workflows/RJIT/badge.svg"></a> <a href="https://github.com/ruby/ruby/actions?query=workflow%3A"Ubuntu""><img src="https://github.com/ruby/ruby/workflows/Ubuntu/badge.svg"></a> <a href="https://github.com/ruby/ruby/actions?query=workflow%3A"Windows""><img src="https://github.com/ruby/ruby/workflows/Windows/badge.svg"></a> <a href="https://ci.appveyor.com/project/ruby/ruby/branch/master"><img src="https://ci.appveyor.com/api/projects/status/0sy8rrxut4o0k960/branch/master?svg=true"></a> <a href="https://app.travis-ci.com/ruby/ruby"><img src="https://app.travis-ci.com/ruby/ruby.svg?branch=master"></a> <a href="https://cirrus-ci.com/github/ruby/ruby/master"><img src="https://api.cirrus-ci.com/github/ruby/ruby.svg"></a></p>

<h1 id="label-What+is+Ruby-3F">What is Ruby?<span><a href="#label-What+is+Ruby-3F">&para;</a> <a href="#top">&uarr;</a></span></h1>

<p>Ruby is an interpreted object-oriented programming language often used for web development. It also offers many scripting features to process plain text and serialized files, or manage system tasks. It is simple, straightforward, and extensible.</p>

<h2 id="label-Features+of+Ruby">Features of Ruby<span><a href="#label-Features+of+Ruby">&para;</a> <a href="#top">&uarr;</a></span></h2>
<ul><li>
<p>Simple Syntax</p>
</li><li>
<p><strong>Normal</strong> Object-oriented Features (e.g. class, method calls)</p>
</li><li>
<p><strong>Advanced</strong> Object-oriented Features (e.g. mix-in, singleton-method)</p>
</li><li>
<p>Operator Overloading</p>
</li><li>
<p><a href="../Exception.html"><code>Exception</code></a> Handling</p>
</li><li>
<p>Iterators and Closures</p>
</li><li>
<p>Garbage Collection</p>
</li><li>
<p>Dynamic Loading of <a href="../Object.html"><code>Object</code></a> Files (on some architectures)</p>
</li><li>
<p>Highly Portable (works on many Unix-like/POSIX compatible platforms as  well as Windows, macOS, etc.) cf. <a href="https://docs.ruby-lang.org/en/master/maintainers_md.html#label-Platform+Maintainers">docs.ruby-lang.org/en/master/maintainers_md.html#label-Platform+Maintainers</a></p>
</li></ul>

<h2 id="label-How+to+get+Ruby">How to get Ruby<span><a href="#label-How+to+get+Ruby">&para;</a> <a href="#top">&uarr;</a></span></h2>

<p>For a complete list of ways to install Ruby, including using third-party tools like rvm, see:</p>

<p><a href="https://www.ruby-lang.org/en/downloads">www.ruby-lang.org/en/downloads</a>/</p>

<p>You can download release packages and the snapshot of the repository. If you want to download whole versions of Ruby, please visit <a href="https://www.ruby-lang.org/en/downloads/releases">www.ruby-lang.org/en/downloads/releases</a>/.</p>

<h3 id="label-Download+with+Git">Download with Git<span><a href="#label-Download+with+Git">&para;</a> <a href="#top">&uarr;</a></span></h3>

<p>The mirror of the Ruby source tree can be checked out with the following command:</p>

<pre>$ git clone https://github.com/ruby/ruby.git</pre>

<p>There are some other branches under development. Try the following command to see the list of branches:</p>

<pre>$ git ls-remote https://github.com/ruby/ruby.git</pre>

<p>You may also want to use <a href="https://git.ruby-lang.org/ruby.git">git.ruby-lang.org/ruby.git</a> (actual master of Ruby source) if you are a committer.</p>

<h2 id="label-How+to+build">How to build<span><a href="#label-How+to+build">&para;</a> <a href="#top">&uarr;</a></span></h2>

<p>See <a href="https://docs.ruby-lang.org/en/master/contributing/building_ruby_md.html">Building Ruby</a></p>

<h2 id="label-Ruby+home+page">Ruby home page<span><a href="#label-Ruby+home+page">&para;</a> <a href="#top">&uarr;</a></span></h2>

<p><a href="https://www.ruby-lang.org">www.ruby-lang.org</a>/</p>

<h2 id="label-Documentation">Documentation<span><a href="#label-Documentation">&para;</a> <a href="#top">&uarr;</a></span></h2>
<ul><li>
<p><a href="https://docs.ruby-lang.org/en/master/index.html">English</a></p>
</li><li>
<p><a href="https://docs.ruby-lang.org/ja/master/index.html">Japanese</a></p>
</li></ul>

<h2 id="label-Mailing+list">Mailing list<span><a href="#label-Mailing+list">&para;</a> <a href="#top">&uarr;</a></span></h2>

<p>There is a mailing list to discuss Ruby. To subscribe to this list, please send the following phrase:</p>

<pre class="ruby"><span class="ruby-identifier">join</span>
</pre>

<p>in the mail subject (not body) to the address <a href="mailto:ruby-talk-request@ml.ruby-lang.org?subject=join">ruby-talk-request@ml.ruby-lang.org</a>.</p>

<h2 id="label-Copying">Copying<span><a href="#label-Copying">&para;</a> <a href="#top">&uarr;</a></span></h2>

<p>See the file <a href="COPYING.html">COPYING</a>.</p>

<h2 id="label-Feedback">Feedback<span><a href="#label-Feedback">&para;</a> <a href="#top">&uarr;</a></span></h2>

<p>Questions about the Ruby language can be asked on the <a href="https://www.ruby-lang.org/en/community/mailing-lists">Ruby-Talk</a> mailing list or on websites like <a href="https://stackoverflow.com">stackoverflow.com</a>.</p>

<p>Bugs should be reported at <a href="https://bugs.ruby-lang.org">bugs.ruby-lang.org</a>. Read <a href="https://docs.ruby-lang.org/en/master/contributing/reporting_issues_md.html">“Reporting Issues”</a> for more information.</p>

<h2 id="label-Contributing">Contributing<span><a href="#label-Contributing">&para;</a> <a href="#top">&uarr;</a></span></h2>

<p>See <a href="https://docs.ruby-lang.org/en/master/contributing_md.html">“Contributing to Ruby”</a>, which includes setup and build instructions.</p>

<h2 id="label-The+Author">The Author<span><a href="#label-The+Author">&para;</a> <a href="#top">&uarr;</a></span></h2>

<p>Ruby was originally designed and developed by Yukihiro Matsumoto (Matz) in 1995.</p>

<p><a href="mailto:matz@ruby-lang.org">matz@ruby-lang.org</a></p>

</main>

</div>  <!--  class='wrapper hdiv' -->


<footer id="validator-badges" role="contentinfo">
<p><a href="https://validator.w3.org/check/referer">Validate</a></p>
<p>Generated by <a href="https://ruby.github.io/rdoc/">RDoc</a> 6.4.0.</p>
<p>Based on <a href="https://github.com/ged/darkfish/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.</p>

  
    <p><p><a href="https://ruby-doc.org">Ruby-doc.org</a> is provided by <a href="https://jamesbritt.com">James Britt</a> and <a href="https://neurogami.com">Neurogami</a>. </p><p><a href="https://jamesbritt.bandcamp.com/">Hack your world.  Feed your head.  Live curious</a>.</p>
</p>
  
  </footer>

<script type="text/javascript">


  let ads  = $("#carbonads-container").children().detach();


  function swapMode() {
    var cookieName = 'darkmode';
    var cssDarkmode = Cookies.get(cookieName);
    console.log("***** swapMode! " + cssDarkmode + " *****");


    if (cssDarkmode == "true") {
      console.log("We have dark mode, set the css to light ...");
      $('#rdoccss').attr("href", defaultModeCssHref);
      $('#cssSelect').text("Dark mode");
      cssDarkmode = "false";
      console.log("swapMode! Now set cookie to " + cssDarkmode);
      Cookies.set(cookieName, cssDarkmode);

    } else {
      console.log("We not have dark mode, set the css to dark ...");
      $('#rdoccss').attr("href", darkModeCsseHref);
      $('#cssSelect').text("Light mode");
      cssDarkmode = "true";
      console.log("swapMode! Now set cookie to " + cssDarkmode);
      Cookies.set(cookieName, cssDarkmode);

    }

    console.log("  --------------- ");
  }


const vueCssApp = new Vue({
el: '#menubar',
data: {
isDark: false
},
methods: {
toggleClass: function(event){
this.isDark = !this.isDark;
}
}
})

const vueApp = new Vue({
el: '#vapp',
data: { 
isOpen: true
},

mounted() {
this.handleResize();
this.manage_mob_classes();
window.addEventListener('resize', this.handleResize)
//this.isOpen !=  (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent));
},
destroyed() {
window.removeEventListener('resize', this.handleResize)
},
created() {
//manage_mob_classes();
},

methods : {
isMobile() {
  return (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent));
},

  handleResize() {
    if (!this.isMobile()) {
      this.isOpen = window.innerWidth > 800;
    }
  },

  manage_mob_classes() {
    if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
      $("nav").addClass("mob_nav");
      $("main").addClass("mob_main");
      $("#extraz").addClass("mob_extraz");
      $("#carbonads-container").addClass("mob_carbonads-container");
      this.isOpen  = false;
    } else {
      $("nav").removeClass("mob_nav") 
        $("main").removeClass("mob_main");
      $("#extraz").removeClass("mob_extraz");
      $("#carbonads-container").removeClass("mob_carbonads-container");
      this.isOpen  = true;
    }
  },

  toggleNav() {
    this.isOpen =! this.isOpen ;
    // alert("Toggle nav!");
    console.log("toggleNav() click: " + this.isOpen );
  }
}
})

$("#carbonads-container").append(ads);


$(function() {

    var darkmode = Cookies.get("darkmode");
    console.log("Document ready: " + darkmode);

    if ( darkmode  == "true" ) {
      $('#cssSelect').text("Light mode");
    } else {
      $('#cssSelect').text("Dark mode");
     }

    $('body').css('display','block');
    });

</script>

    
  </body> 
</html>

